#ifndef __HAL_SNTP_H__
#define __HAL_SNTP_H__

#include <stdint.h>
#include <stdbool.h>
#include <time.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief SNTP 组件错误码
 */
typedef enum {
    HAL_SNTP_OK = 0,          // 操作成功
    HAL_SNTP_ERR_INIT,        // 初始化失败
    HAL_SNTP_ERR_PARAM,       // 参数错误
    HAL_SNTP_ERR_NOT_INIT,    // 组件未初始化
    HAL_SNTP_ERR_MAX_SERVERS, // 超过最大服务器数量
    HAL_SNTP_ERR_OTHER,       // 其他错误
} hal_sntp_err_t;

/**
 * @brief 时间同步回调函数类型
 * @param tv 同步后的时间信息
 */
typedef void (*sntp_sync_cb_t)(struct timeval *tv);

/**
 * @brief 初始化 SNTP 组件
 * @note 必须在网络连接建立后调用
 * @return 错误码
 */
hal_sntp_err_t hal_sntp_init(void);

/**
 * @brief 反初始化 SNTP 组件
 */
void hal_sntp_deinit(void);

/**
 * @brief 添加 SNTP 服务器
 * @param index 服务器索引位置 (0-2)
 * @param server 服务器地址（IP 或域名）
 * @return 错误码
 */
hal_sntp_err_t hal_sntp_add_server(uint8_t index, const char *server);

/**
 * @brief 设置时间同步回调函数
 * @param cb 回调函数指针
 */
void hal_sntp_set_sync_callback(sntp_sync_cb_t cb);

/**
 * @brief 获取当前时间同步状态
 * @return true 时间已同步，false 时间未同步
 */
bool hal_sntp_is_time_synced(void);

#ifdef __cplusplus
}
#endif

#endif // __HAL_SNTP_H__
